/*
 * para buscar el valor dentro de un archivo ObjectOutputStream ver en
 * os
 * handles
 * objs
 * [3] y [4]
 * 
 * */

import java.io.*;

class Persona implements Serializable
{
    private String nombre = new String();
    private String apellido = new String();
    private String nombreArchivo = new String("File2.txt");
    private static final long serialVersionUID = 20100401L;

    public Persona()
    {

    }

    public String getApellido()
    {
        return apellido;
    }

    public String getNombre()
    {
        return nombre;
    }

    public void leer()
    {   // lee los datos de la perona y los almacena en sus variables miembro
        BufferedReader sb = new BufferedReader (new InputStreamReader(System.in));

        try
        {
            System.out.print("Ingrese nombre: ");
            nombre = sb.readLine();
            System.out.print("Ingrese apellido: ");
            apellido = sb.readLine();
        }
        catch (IOException io)
        {
            System.out.print("se produjo una IOExcepton " + io);
        }
    }

    public void mostrar()
    {
        System.out.println("\n" + "nombre:   " + nombre);
        System.out.println("apellido: " + apellido + "\n");
    }

    public Persona leerArchivo()
    {
        Persona p = new Persona();
        try
        {
            FileInputStream   fs = new FileInputStream(nombreArchivo);
            ObjectInputStream os = new ObjectInputStream(fs);
            p = (Persona) os.readObject();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        catch(ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        return p;
    }

    public static void cls()
    {
        
    }

    public void mostrarTodos()
    {
        try
        {
            FileInputStream fis     = new FileInputStream(nombreArchivo);
            ObjectInputStream ois   = new ObjectInputStream(fis);
            //ObjectInputStream ois = new ObjectInputStream(new FileInputStream(nombreArchivo));
            // Se lee el primer objeto
           // ois.reset();            // debería posicionar al inicio del file
            Object aux = ois.readObject();
            if (aux != null)
            {
                System.out.print("Las personas cargadas son: ");
            }
            while (aux != null)                 // Mientras haya objetos
            {
                if (aux instanceof Persona)
                {
                    Persona p = (Persona) aux;
                    p.mostrar();
                }
                aux = ois.readObject();

            }             
            ois.close();
        }
        catch (EOFException e1)
        {
            System.out.println("Fin de fichero");
        }
        catch (Exception e2)
        {
            e2.printStackTrace();
        }
    }
/*
    public void guardarPersona()
    {
        char[] in = new char[50]; // to store input
        int size = 0;

        try
        {
            FileOutputStream   fs = new FileOutputStream(nombreArchivo);
            //FileOutputStream   fs = new FileOutputStream(nombreArchivo,true);
            ObjectOutputStream os = new ObjectOutputStream(fs);
            os.writeObject(this);
            os.flush();
            os.close();
         }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
*/

    public void cargarPersonas()
    {   // lee de a una persona y las guarda        
        boolean isCreated = false;
        char c = '1';
        FileOutputStream   fs = null;
        myObjectOutputStream os = null;
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            System.out.println("Desea ingresar otra persona: S/N ");
            //le paso a c el primer caracter leído por teclado
            c = (char) bf.readLine().charAt(0);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        c = Character.toUpperCase(c);
        while(c == 'S')
        //for (int i=0;i<2;i++)
        {
                Persona p = new Persona(); // creo el nuevo objeto persona en cada iteracion
                p.leer();
                // intento grabarlo aqui
                try
                {
                    File file = new File (nombreArchivo);       // verifico si existe el archivo
                    isCreated = file.isFile();

                    System.out.println(file.exists());

                    if(!isCreated)                              // si no existe el archivo lo crea
                    {                        
                        {
                            fs = new FileOutputStream(nombreArchivo,true);
                            os = new myObjectOutputStream(fs);
                        }
                    }
                    else
                    {
                        if(os == null) // no lo esta apuntando, debo hacer que lo apunte
                        {
                              //aca me debería hacer que apunte al file que ya existe pero sin borrar lo que ya tiene o sea sin el new
                            fs = new FileOutputStream(nombreArchivo,true);
                            os = new myObjectOutputStream(fs);
                        }
                    }
                    os.writeObject(p);
                    os.flush();
                    os.reset();         // el reset lo debo hacer porque sino graba varias veces la misma persona
                 }                
                catch (IOException e)
                {
                    e.printStackTrace();
                }                
                try
                {
                    System.out.println("Desea ingresar otra persona: S/N ");                    
                    c = (char) bf.readLine().charAt(0);     //le paso a c el primer caracter leído por teclado
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
                c = Character.toUpperCase(c);
        }      //end while
     }

    public void menu()
    {
        Persona.cls();
        System.out.print(this);
    }   //end menu

    public static void main(String[] args)
    {
        Persona p = new Persona();
       // p.menu();
        p.cargarPersonas();
        p.mostrarTodos();
    }   // end main
}   




// Ejemplo simple de lectura de datos consola
/*
import java.io.IOException;

public class Persona
{
    public static void main(String[] args)  throws IOException
    {
        int character = ' ';
        while (character != 13)
            {
                character = System.in.read();
                System.out.print((char) character);
            }
    }
}


*/